package com.ruoyi.system.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.ruoyi.common.base.BaseEntity;
import com.ruoyi.common.enums.TxnType;
import com.ruoyi.common.enums.TxnTypeGroup;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.WdyTxnHistoryMapper;
import com.ruoyi.system.domain.WdyTxnHistory;
import com.ruoyi.system.service.IWdyTxnHistoryService;
import com.ruoyi.common.support.Convert;

/**
 * 交易流水 服务层实现
 * 
 * @author ruoyi
 * @date 2019-03-07
 */
@Service
public class WdyTxnHistoryServiceImpl extends ServiceImpl<WdyTxnHistoryMapper, WdyTxnHistory> implements IWdyTxnHistoryService
{
	@Autowired
	private WdyTxnHistoryMapper wdyTxnHistoryMapper;

	/**
     * 查询交易流水信息
     * 
     * @param id 交易流水ID
     * @return 交易流水信息
     */
    @Override
	public WdyTxnHistory selectWdyTxnHistoryById(Long id)
	{
	    return wdyTxnHistoryMapper.selectWdyTxnHistoryById(id);
	}
	
	/**
     * 查询交易流水列表
     * 
     * @param wdyTxnHistory 交易流水信息
     * @return 交易流水集合
     */
	@Override
	public List<WdyTxnHistory> selectWdyTxnHistoryList(WdyTxnHistory wdyTxnHistory)
	{
	    return wdyTxnHistoryMapper.selectWdyTxnHistoryList(wdyTxnHistory);
	}
	
    /**
     * 新增交易流水
     * 
     * @param wdyTxnHistory 交易流水信息
     * @return 结果
     */
	@Override
	public int insertWdyTxnHistory(WdyTxnHistory wdyTxnHistory)
	{
	    return wdyTxnHistoryMapper.insertWdyTxnHistory(wdyTxnHistory);
	}
	
	/**
     * 修改交易流水
     * 
     * @param wdyTxnHistory 交易流水信息
     * @return 结果
     */
	@Override
	public int updateWdyTxnHistory(WdyTxnHistory wdyTxnHistory)
	{
	    return wdyTxnHistoryMapper.updateWdyTxnHistory(wdyTxnHistory);
	}

	/**
     * 删除交易流水对象
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
	@Override
	public int deleteWdyTxnHistoryByIds(String ids)
	{
		return wdyTxnHistoryMapper.deleteWdyTxnHistoryByIds(Convert.toStrArray(ids));
	}

	@Override
	public List<WdyTxnHistory> listByGroup(String userId, TxnTypeGroup txnTypeGroup) {
		QueryWrapper<WdyTxnHistory> queryWrapper = new QueryWrapper<WdyTxnHistory>();
		queryWrapper.eq("user_id", userId);
		queryWrapper.in("txn_type", TxnType.getCodeListByGroup(txnTypeGroup));
		queryWrapper.eq("del_flag", BaseEntity.NOT_DELETED);
		queryWrapper.orderByDesc("id");
		return list(queryWrapper);
	}

	@Override
	public BigDecimal getTxnAmount(String startDate, String endDate, TxnType txnType, List<String> userList) {
		QueryWrapper<WdyTxnHistory> queryWrapper = new QueryWrapper<WdyTxnHistory>();
		queryWrapper.select("IFNULL(SUM(txn_amount),0) AS amount");
		queryWrapper.in(CollectionUtils.isNotEmpty(userList), "user_id", userList);
		queryWrapper.eq("txn_type", txnType.getCode());
		queryWrapper.ge("create_time", startDate + " 00:00:00");
		queryWrapper.le("create_time", endDate + " 23:59:59");
		queryWrapper.eq("del_flag", BaseEntity.NOT_DELETED);
		Map<String, Object> map = this.getMap(queryWrapper);
		return (BigDecimal) map.get("amount");
	}
}
